import {
	baseUrl,
	skipAuth
} from "./config.js"

module.exports = (vm) => {
	// 初始化请求配置
	uni.$u.http.setConfig((config) => {
		/* config 为默认全局配置*/
		config.baseURL = baseUrl; /* 根域名 */
		return config
	})

	// 请求拦截
	uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
		// 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
		//vm.$store.state
		config.data = config.data || {}
		//校验是否需要判断用户登录 .includes(endpoint)
		let url = config.url;
		let isSkipAuth = true;
		if(url){
			if(skipAuth.includes(url)){
				isSkipAuth = false;
			}
		}
		if(isSkipAuth){
			var isLogin = vm.$store.state.isLogin
			console.log("检查是否登录 isLogin ==> {}", isLogin);
			if(isLogin){
				console.log("标记登录过，获取缓存信息");
				console.log("vm.$store.state.userInfo  ==> {}", vm.$store.state.userInfo)
				if(vm.$store.state.userInfo){
					console.log("token  ==> {}", vm.$store.state.userInfo.token)
					var token = vm.$store.state.userInfo.token;
					if (token) {
						config.header['satoken'] = token
					}
				}
			}
		}

		console.log("config  ==>", config)
		console.log("config.data  ==>", Object.keys(config.data).length)

		var len = Object.keys(config.data).length;
		var method = config.method;

		if (!config.header['content-type'] && (config.smallParams || (method == 'POST' && len == 1))) {
			config.header['content-type'] = 'application/x-www-form-urlencoded';
		}

		return config
	}, config => { // 可使用async await 做异步操作
		return Promise.reject(config)
	})

	// 响应拦截
	uni.$u.http.interceptors.response.use((response) => {
		let res = response.data;
		console.log("响应拦截, 接收到的返回: {}", res)
		console.log("响应拦截, code: {}", res.code)
		// 自定义参数
		const custom = response.config?.custom
		//与后端沟通, 后端的自定义状态码： -1，要求用户重新登录
		if (res.code == -1) {
			console.log("重新登录")
			vm.$store.commit('setLogout', {});
			uni.$u.toast("用户身份信息过期,请重新登录")
			uni.$u.route('/pages/userCenter/userLogin');
		} else if (res.code != 200) {
			//如果没有显式定义custom的toast参数为false的话，默认对报错进行toast弹出提示
			if (custom.toast !== false) {
				uni.$u.toast(res.msg)
			}
		}
		return res;
	}, (response) => {
		// 对响应错误做点什么 （statusCode !== 200）
		return Promise.reject(response)
	})
}